import java.lang.reflect.Array;

public class Rotate {
    //给定一个整数数组 nums，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
//输入: nums = [1,2,3,4,5,6,7], k = 3
//输出: [5,6,7,1,2,3,4]
//解释:
//向右轮转 1 步: [7,1,2,3,4,5,6]
//向右轮转 2 步: [6,7,1,2,3,4,5]
//向右轮转 3 步: [5,6,7,1,2,3,4]
    public void rotate(int[] nums, int k) {
        int temp= nums.length-1;
        int swap = 0;
        for (int i = 0; i < k; i++) {
            swap = nums[temp];
            for (int j = nums.length-1;j>0;j--){
                nums[j]=nums[j-1];
            }
            nums[0]=swap;
        }
    }
//方法一：使用额外的数组
//我们可以使用额外的数组来将每个元素放至正确的位置。用 nnn 表示数组的长度，
// 我们遍历原数组，将原数组下标为 iii 的元素放至新数组下标为 (i+k) mod n(i+k)\bmod n(i+k)modn 的位置，
// 最后将新数组拷贝至原数组即可。
//public void rotate(int[] nums, int k) {
//        int n = nums.length;
//        int[] newArr = new int[n];
//        for (int i = 0; i < n; ++i) {
//            newArr[(i + k) % n] = nums[i];
//        }
//        System.arraycopy(newArr, 0, nums, 0, n);
//    }

    public static void main(String[] args) {
        int [] nums = new int[]{1,2,3,4,5,6,7};
        int k = 6;
        Rotate  r = new Rotate();
        r.rotate(nums,k);
        for (int x:
             nums) {
            System.out.printf("%d",x);
        }
    }
}
